package com.ct.service.entity;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import com.ct.entity.po.Schedule;
import com.ct.entity.query.ScheduleQuery;
import com.ct.entity.vo.MapDataVO;
import com.ct.mappers.ReportMapper;

/**
 * @Description:
 * @Author: cby
 * @Date: 2025/5/23 18:07
 */
public class MapDataStrategy implements ReportDataStrategy<List<MapDataVO>> {
    private ReportMapper<Schedule, ScheduleQuery> reportScheduleMapper;

    public MapDataStrategy(ReportMapper<Schedule, ScheduleQuery> reportScheduleMapper) {
        this.reportScheduleMapper = reportScheduleMapper;
    }

    @Override
    public List<MapDataVO> getData(Date startDate, Date endDate) {
        List<MapDataVO> mapDataVOList = initMapDataList();
        List<Schedule> sourseList = reportScheduleMapper.selectScheduleByDate(startDate, endDate);
        for (Schedule s : sourseList) {
            for (MapDataVO mapDataVO : mapDataVOList) {
                if (s.getLocation().matches("^" + mapDataVO.getName().replaceAll("省|市|自治区|特别行政区", "") + ".*$")) {
                    mapDataVO.setValue(mapDataVO.getValue() + 1);
                    break;
                }
            }
        }
        return mapDataVOList.stream()
                .sorted(Comparator.comparingInt(MapDataVO::getValue))
                .collect(Collectors.toList());
    }

    private List<MapDataVO> initMapDataList() {
        List<MapDataVO> mapDataVOList = new ArrayList<>();
        mapDataVOList.add(new MapDataVO("广东省", 0));
        mapDataVOList.add(new MapDataVO("江苏省", 0));
        mapDataVOList.add(new MapDataVO("山东省", 0));
        mapDataVOList.add(new MapDataVO("浙江省", 0));
        mapDataVOList.add(new MapDataVO("四川省", 0));
        mapDataVOList.add(new MapDataVO("河南省", 0));
        mapDataVOList.add(new MapDataVO("湖北省", 0));
        mapDataVOList.add(new MapDataVO("福建省", 0));
        mapDataVOList.add(new MapDataVO("台湾省", 0));
        mapDataVOList.add(new MapDataVO("湖南省", 0));
        mapDataVOList.add(new MapDataVO("上海市", 0));
        mapDataVOList.add(new MapDataVO("安徽省", 0));
        mapDataVOList.add(new MapDataVO("河北省", 0));
        mapDataVOList.add(new MapDataVO("北京市", 0));
        mapDataVOList.add(new MapDataVO("陕西省", 0));
        mapDataVOList.add(new MapDataVO("江西省", 0));
        mapDataVOList.add(new MapDataVO("辽宁省", 0));
        mapDataVOList.add(new MapDataVO("重庆市", 0));
        mapDataVOList.add(new MapDataVO("云南省", 0));
        mapDataVOList.add(new MapDataVO("广西壮族自治区", 0));
        mapDataVOList.add(new MapDataVO("香港特别行政区", 0));
        mapDataVOList.add(new MapDataVO("山西省", 0));
        mapDataVOList.add(new MapDataVO("内蒙古自治区", 0));
        mapDataVOList.add(new MapDataVO("贵州省", 0));
        mapDataVOList.add(new MapDataVO("新疆维吾尔自治区", 0));
        mapDataVOList.add(new MapDataVO("天津市", 0));
        mapDataVOList.add(new MapDataVO("黑龙江省", 0));
        mapDataVOList.add(new MapDataVO("吉林省", 0));
        mapDataVOList.add(new MapDataVO("甘肃省", 0));
        mapDataVOList.add(new MapDataVO("海南省", 0));
        mapDataVOList.add(new MapDataVO("宁夏回族自治区", 0));
        mapDataVOList.add(new MapDataVO("青海省", 0));
        mapDataVOList.add(new MapDataVO("澳门特别行政区", 0));
        mapDataVOList.add(new MapDataVO("西藏自治区", 0));
        mapDataVOList.add(new MapDataVO("南海诸岛", 0));
        return mapDataVOList;
    }
}
